package services

import (
	"errors"
	"lingc/models"
	"lingc/utils"
	"log"
	"time"

	"gorm.io/gorm"
)

// SysBannerService 提供账号登录校验的服务
type SysBannerService struct {
	DB *gorm.DB
}

// NewSysBannerService 创建一个新的 SysBannerService 实例
func NewSysBannerService(db *gorm.DB) *SysBannerService {
	return &SysBannerService{DB: db}
}

//表单业务

/**
 * @Description: 分页获取列表
 * @param where
 * @param page
 * @param pageSize
 * @return []*models.SysBanner
 * @return int
 * @return int64
 * @return error
 */
func (s *SysBannerService) PageSysBannerList(where string, page, pageSize int) ([]*models.SysBannerList, int, int64, error) {
	var groups []*models.SysBanner
	var total int64

	// 计算偏移量
	offset := (page - 1) * pageSize

	// 获取总记录数
	if err := s.DB.Model(&models.SysBanner{}).Where(where).Count(&total).Error; err != nil {
		return nil, 1, 0, err
	}

	// 获取分页数据
	if err := s.DB.Where(where).Offset(offset).Limit(pageSize).Order("id DESC").Find(&groups).Error; err != nil {
		return nil, 1, 0, err
	}
	var list []*models.SysBannerList
	list = []*models.SysBannerList{}
	for _, data := range groups {
		list = append(list, &models.SysBannerList{
			ID:        data.ID,
			Title:     data.Title,
			Src:       data.Src,
			JumpType:  data.JumpType,
			JumpLink:  data.JumpLink,
			Sort:      data.Sort,
			Area:      data.Area,
			Status:    data.Status,
			StartTime: time.Unix(data.StartTime, 0).Format("2006-01-02 15:04:05"),
			EndTime:   time.Unix(data.EndTime, 0).Format("2006-01-02 15:04:05"),
			AppID:     data.AppID,
			CreatedAt: time.Unix(data.CreatedAt, 0).Format("2006-01-02 15:04:05"), // 格式化时间戳
			UpdatedAt: time.Unix(data.UpdatedAt, 0).Format("2006-01-02 15:04:05"), // 格式化时间戳
		})
	}

	return list, page, total, nil
}

/**
 * @Description: 创建新
 * @param username
 * @param password
 * @param realname
 * @param avatar
 * @param status
 * @return *models.SysBannerCreate
 * @return error
 */
func (s *SysBannerService) CreateSysBanner(data *models.SysBannerCreate) (*models.SysBannerCreate, error) {

	/*
		Title     string `json:"title"`
		Src       string `json:"src"`
		JumpType  string `json:"jump_type"`
		JumpLink  string `json:"jump_link"`
		Area      string `json:"area"`
		Sort      int    `json:"sort"`
		Status    uint8  `json:"status"`
		StartTime string `json:"start_time"`
		EndTime   string `json:"end_time"`
		AppID     int    `json:"app_id"`
	*/
	addData := &models.SysBanner{
		Title:     data.Title,
		Src:       data.Src,
		JumpType:  data.JumpType,
		JumpLink:  data.JumpLink,
		Area:      data.Area,
		Sort:      data.Sort,
		Status:    data.Status,
		StartTime: utils.StrToTime(data.StartTime),
		EndTime:   utils.StrToTime(data.EndTime),
		CreatedAt: time.Now().Unix(),
		UpdatedAt: time.Now().Unix(),
	}
	// 保存到数据库
	if err := s.DB.Create(addData).Error; err != nil {
		return nil, err
	}
	return data, nil
}

// GetSysBanner 获取信息
func (s *SysBannerService) GetSysBanner(where string) (*models.SysBanner, error) {
	var data models.SysBanner
	if err := s.DB.Where(where).First(&data).Error; err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return nil, errors.New("数据不存在")
		}
		return nil, err
	}
	// log.Printf("data_info:%v", data)
	return &data, nil
}

/**
 * @Description: 更新信息
 * @param data
 * @return error
 */
func (s *SysBannerService) UpdateSysBanner(data *models.SysBannerUpdate) (*models.SysBannerUpdate, error) {
	// 检查名是否已存在
	var existingData models.SysBanner
	if err := s.DB.Where("id = ?", data.ID).First(&existingData).Error; err != nil {
		return nil, errors.New("数据不存在")
	}
	/*
		Title     string `json:"title"`
		Src       string `json:"src"`
		JumpType  string `json:"jump_type"`
		JumpLink  string `json:"jump_link"`
		Area      string `json:"area"`
		Sort      int    `json:"sort"`
		Status    uint8  `json:"status"`
		StartTime string `json:"start_time"`
		EndTime   string `json:"end_time"`
		AppID     int    `json:"app_id"`
	*/
	existingData.Title = data.Title
	existingData.Src = data.Src
	existingData.JumpType = data.JumpType
	existingData.JumpLink = data.JumpLink
	existingData.Area = data.Area
	existingData.Sort = data.Sort
	existingData.Status = data.Status
	existingData.StartTime = utils.StrToTime(data.StartTime)
	existingData.EndTime = utils.StrToTime(data.EndTime)
	existingData.UpdatedAt = time.Now().Unix()
	log.Printf("updateSysBannerEndTime: %v", existingData.EndTime)

	return data, s.DB.Save(existingData).Error
}

/**
 * @Description: 删除
 * @param id
 * @return error
 */
func (s *SysBannerService) DeleteSysBanner(id uint) error {
	var data models.SysBanner
	if err := s.DB.Where("id = ?", id).First(&data).Error; err != nil {
		return errors.New("数据不存在")
	}
	return s.DB.Delete(&data).Error
}

/**
 * @Description: 批量删除
 * @param id
 * @return error
 */
func (s *SysBannerService) DeleteSysBanners(ids []string) error {
	for _, id := range ids {
		var data models.SysBanner
		if err := s.DB.Where("id = ?", id).First(&data).Error; err != nil {
			return errors.New("数据不存在")
		}
		err := s.DB.Delete(&data).Error
		if err != nil {
			return errors.New("删除失败")
		}
	}
	return nil
}
